package io.github.maojian.arr;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 1636. 按照频率将数组升序排序
 * 给你一个整数数组 nums ，请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同，请你按照数值本身将它们 降序 排序。
 *
 * 请你返回排序后的数组。
 */
public class Q1636 {
    public int[] frequencySort(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
            list.add(num);
        }
        Collections.sort(list, (a, b) -> {
            int numA = map.get(a), numB = map.get(b);
            return numA != numB ? numA - numB : b - a;
        });
        for (int i = 0;i<nums.length;i++){
            nums[i] = list.get(i);
        }
        return nums;
    }
}
